home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- ** **
- ** Module: dpgIO.c **
- ** **
- ** **
- ** **
- ** **
- ** **
- ** Copyright (C) 1995-1996 Apple Computer, Inc. All rights reserved. **
- ** **
- ** **
- *****************************************************************************/
-
- #include "dpg.h"
- #include "dpgIO.h"
- #include "dpgMemory.h"
-
- /*===========================================================================*\
- *
- * Routine: exDistanceProxyDistanceList_Read()
- *
- * Comments:
- *
- \*===========================================================================*/
- static TQ3Status exDistanceProxyDistanceList_Read(
- TQ3GroupObject group,
- TQ3FileObject file)
- {
- unsigned long flag;
- float distance;
- unsigned long i, cnt;
-
- TQ3DistanceProxyDisplayGroupPrivate *gPriv;
-
- gPriv = DPG_GETPRIVATE(group);
-
- if (Q3Uns32_Read(&cnt, file) == kQ3Failure)
- return kQ3Failure;
-
- for (i=0, gPriv->distIOTblCnt = 0; i < cnt; i++)
- {
- if (Q3Uns32_Read(&flag, file) == kQ3Failure)
- return kQ3Failure;
-
- if (Q3Float32_Read(&distance, file) == kQ3Failure)
- return kQ3Failure;
-
- if (flag == kQ3True) {
- gPriv->distIOTbl = dpgRealloc(
- gPriv->distIOTbl,
- sizeof(TQ3DistanceIOData) * (gPriv->distIOTblCnt+1));
- if (!gPriv->distIOTbl)
- {
- gPriv->distIOTblCnt = 0;
- dpgFree(gPriv->distIOTbl);
- gPriv->distIOTbl = 0;
- return kQ3Failure;
- }
- gPriv->distIOTbl[gPriv->distIOTblCnt].distance = distance;
- gPriv->distIOTbl[gPriv->distIOTblCnt].index = i;
-
- gPriv->distIOTblCnt++;
- }
- }
- return kQ3Success;
- }
-
- /*===========================================================================*\
- *
- * Routine: exDistanceProxyDistanceList_Traverse()
- *
- * Comments:
- *
- \*===========================================================================*/
- static unsigned long exDistanceProxyDistanceList_Traverse(
- TQ3GroupObject group)
- {
- TQ3DistanceProxyDisplayGroupPrivate *gPriv;
- unsigned long size = 0;
-
- gPriv = DPG_GETPRIVATE(group);
-
- Q3Group_CountObjects(group, &size);
-
- size = 4 /* unsigned long */ +
- (size * (4 /* boolean */ + 4 /* float */));
-
- return size;
- }
-
- /*===========================================================================*\
- *
- * Routine: exDistanceProxyDistanceList_Write()
- *
- * Comments:
- *
- \*===========================================================================*/
- static TQ3Status exDistanceProxyDistanceList_Write(
- TQ3GroupObject group,
- TQ3FileObject file)
- {
- TQ3DistanceProxyDisplayGroupPrivate *gPriv;
- TQ3GroupPosition position;
- unsigned long cnt;
-
- gPriv = DPG_GETPRIVATE(group);
-
- if (Q3Comment_Write("Distance Pair", file) == kQ3Failure)
- return kQ3Failure;
-
- Q3Group_CountObjects(group, &cnt);
-
- if ((Q3Uns32_Write(cnt, file) == kQ3Failure) ||
- (Q3Comment_Write("Count", file) == kQ3Failure))
- return kQ3Failure;
-
- for (Q3Group_GetFirstPosition(group, &position); position != NULL;)
- {
- float distance;
- unsigned long flag;
-
- flag = (unsigned long)exDistanceProxyGroup_GetDistanceAtPosition(group, position, &distance);
-
- if ((Q3Uns32_Write(flag, file) == kQ3Failure) ||
- (Q3Float32_Write(distance, file) == kQ3Failure) ||
- (Q3NewLine_Write(file) == kQ3Failure))
- return kQ3Failure;
-
- Q3Group_GetNextPosition(group, &position);
- }
-
- return kQ3Success;
- }
-
- /*===========================================================================*\
- *
- * Routine: exDistanceProxyGroup_Read()
- *
- * Comments:
- *
- \*===========================================================================*/
- TQ3GroupObject exDistanceProxyGroup_Read(
- TQ3FileObject file)
- {
- TQ3Point3D refPt;
- unsigned long flags;
- TQ3GroupObject group;
-
- /* XXX EiFileReadState_BeginGroup(file); */
-
- if ((Q3Point3D_Read(&refPt, file) == kQ3Failure) ||
- (Q3Uns32_Read(&flags, file) == kQ3Failure))
- return NULL;
-
- group = exDistanceProxyGroup_New(&refPt, flags);
-
- if (group == NULL)
- return NULL;
-
- if (exDistanceProxyDistanceList_Read(group, file) == kQ3Failure)
- {
- Q3Object_Dispose(group);
- group = NULL;
- }
-
- return group;
- }
-
- /*===========================================================================*\
- *
- * Routine: exDistanceProxyGroup_Traverse()
- *
- * Comments:
- *
- \*===========================================================================*/
- TQ3Status exDistanceProxyGroup_Traverse(
- TQ3GroupObject group,
- void *unused,
- TQ3ViewObject view)
- {
- unsigned long size;
-
- unused; /* Unused */
-
- /*
- TQ3Point3D refPt = (float * 3) = 12
- unsigned long flags = 4
-
- total size = 16
- */
-
- size = 16 + exDistanceProxyDistanceList_Traverse(group);
-
- if (Q3XView_SubmitWriteData(view, size, group, NULL) == kQ3Failure)
- return kQ3Failure;
-
- //if (EiView_TraverseObjectClass(view, EgDisplayGroupStateClass, group) == kQ3Failure)
- // return kQ3Failure;
-
- return kQ3Success;
- }
-
- /*===========================================================================*\
- *
- * Routine: exDistanceProxyGroup_Write()
- *
- * Comments:
- *
- \*===========================================================================*/
-
- TQ3Status exDistanceProxyGroup_Write(
- TQ3GroupObject group,
- TQ3FileObject file)
- {
- TQ3DistanceProxyDisplayGroupPrivate *gPriv;
- unsigned long size = 0;
-
- gPriv = DPG_GETPRIVATE(group);
-
- if ((Q3NewLine_Write(file) == kQ3Failure) ||
- (Q3Point3D_Write(&gPriv->refPt, file) == kQ3Failure) ||
- (Q3Comment_Write("reference point", file) == kQ3Failure) ||
- (Q3Uns32_Write(gPriv->flag, file) == kQ3Failure) ||
- (Q3Comment_Write("flag", file) == kQ3Failure) ||
- (exDistanceProxyDistanceList_Write(group, file) == kQ3Failure))
- return kQ3Failure;
-
- return kQ3Success;
- }